home *** CD-ROM | disk | FTP | other *** search
/ SGI Varsity Update 1998 August / SGI Varsity Update 1998 August.iso / dist / dist6.4 / mpi.idb / usr / include / mpi.h.z / mpi.h
C/C++ Source or Header  |  1998-07-29  |  21KB  |  769 lines

  1. /* USMID @(#)mpi/include/mpi.h    31.8    05/27/98 13:24:49 */
  2.  
  3. /*
  4.  *    (C) COPYRIGHT SILICON GRAPHICS, INC.
  5.  *    UNPUBLISHED PROPRIETARY INFORMATION.
  6.  *    ALL RIGHTS RESERVED.
  7.  */
  8.  
  9. /*
  10.  * Copyright Notice
  11.  *  + 1993 University of Chicago
  12.  *  + 1993 Mississippi State University
  13.  */
  14.  
  15. #ifndef MPI_H_INCLUDED
  16. #define MPI_H_INCLUDED
  17.  
  18. #if defined(__cplusplus)
  19. extern "C" {
  20. #endif
  21.  
  22. /******************/
  23. /* MPI-1 bindings */
  24. /******************/
  25.  
  26.  
  27. #define MPI_BOTTOM        ((MPI_Aint)0)
  28.  
  29. typedef long            MPI_Aint;
  30. typedef unsigned int        MPI_Request;
  31. typedef unsigned int        MPI_Group;
  32. typedef unsigned int        MPI_Comm;
  33. typedef unsigned int        MPI_Errhandler;
  34. typedef unsigned int        MPI_Op;
  35. typedef unsigned int        MPI_Datatype;
  36.  
  37. typedef struct { 
  38.     int MPI_SOURCE;
  39.     int MPI_TAG;
  40.     int MPI_ERROR;
  41.     int size;
  42.     int reserved[2];
  43. } MPI_Status;
  44.  
  45. enum {
  46.     MPI_COMM_NULL        = 0,
  47.     MPI_COMM_WORLD        = 1,
  48.     MPI_COMM_SELF        = 2
  49. };
  50.  
  51. enum {
  52.     MPI_ERRHANDLER_NULL    = 0,
  53.     MPI_ERRORS_ARE_FATAL    = 1,
  54.     MPI_ERRORS_RETURN    = 2
  55. };
  56.  
  57. enum {
  58.     MPI_GROUP_NULL        = 0,
  59.     MPI_GROUP_EMPTY        = 1
  60. };
  61.  
  62. enum {
  63.     MPI_REQUEST_NULL    = 0
  64. };
  65.  
  66. enum {
  67.     MPI_OP_NULL        = 0,
  68.     MPI_MAX            = 1,
  69.     MPI_MIN            = 2,
  70.     MPI_SUM            = 3,
  71.     MPI_PROD        = 4,
  72.     MPI_LAND        = 5,
  73.     MPI_BAND         = 6,
  74.     MPI_LOR            = 7,
  75.     MPI_BOR            = 8,
  76.     MPI_LXOR        = 9,
  77.     MPI_BXOR        = 10,
  78.     MPI_MAXLOC        = 11,
  79.     MPI_MINLOC        = 12
  80. };
  81.  
  82. enum {
  83.     MPI_DATATYPE_NULL    = 0,
  84.  
  85.     MPI_CHAR        = 1,
  86.     MPI_SHORT        = 2,
  87.     MPI_INT            = 3,
  88.     MPI_LONG        = 4,
  89.     MPI_UNSIGNED_CHAR    = 5,
  90.     MPI_UNSIGNED_SHORT    = 6,
  91.     MPI_UNSIGNED        = 7,
  92.     MPI_UNSIGNED_LONG    = 8,
  93.     MPI_FLOAT        = 9,
  94.     MPI_DOUBLE        = 10,
  95.     MPI_LONG_DOUBLE        = 11,
  96.     MPI_LONG_LONG        = 12,
  97.  
  98.     MPI_INTEGER        = 13,
  99.     MPI_REAL        = 14,
  100.     MPI_DOUBLE_PRECISION    = 15,
  101.     MPI_COMPLEX        = 16,
  102.     MPI_DOUBLE_COMPLEX    = 17,
  103.     MPI_LOGICAL        = 18,
  104.     MPI_CHARACTER        = 19,
  105.     MPI_INTEGER1        = 20,
  106.     MPI_INTEGER2        = 21,
  107.     MPI_INTEGER4        = 22,
  108.     MPI_INTEGER8        = 23,
  109.     MPI_REAL4        = 24,
  110.     MPI_REAL8        = 25,
  111.     MPI_REAL16        = 26,
  112.  
  113.     MPI_BYTE        = 27,
  114.     MPI_PACKED        = 28,
  115.     MPI_UB            = 29,
  116.     MPI_LB            = 30,
  117.  
  118.     MPI_FLOAT_INT        = 31,
  119.     MPI_DOUBLE_INT        = 32,
  120.     MPI_LONG_INT        = 33,
  121.     MPI_2INT        = 34,
  122.     MPI_SHORT_INT        = 35,
  123.     MPI_LONG_DOUBLE_INT    = 36,
  124.  
  125.     MPI_2REAL        = 37,
  126.     MPI_2DOUBLE_PRECISION    = 38,
  127.     MPI_2INTEGER        = 39,
  128.     _MPI_SGI_TYPE_LAST
  129. };
  130.  
  131. #define MPI_LONG_LONG_INT    MPI_LONG_LONG
  132.  
  133. enum {
  134.     MPI_SUCCESS            = 0,
  135.  
  136.     /* These 19 error codes are specified by the MPI-1 standard */
  137.  
  138.     MPI_ERR_BUFFER            = 1,
  139.     MPI_ERR_COUNT            = 2,
  140.     MPI_ERR_TYPE            = 3,
  141.     MPI_ERR_TAG            = 4,
  142.     MPI_ERR_COMM            = 5,
  143.     MPI_ERR_RANK            = 6,
  144.     MPI_ERR_REQUEST            = 7,
  145.     MPI_ERR_ROOT            = 8,
  146.     MPI_ERR_GROUP            = 9,
  147.     MPI_ERR_OP            = 10,
  148.     MPI_ERR_TOPOLOGY        = 11,
  149.     MPI_ERR_DIMS            = 12,
  150.     MPI_ERR_ARG            = 13,
  151.     MPI_ERR_UNKNOWN            = 14,
  152.     MPI_ERR_TRUNCATE        = 15,
  153.     MPI_ERR_OTHER            = 16,
  154.     MPI_ERR_INTERN            = 17,
  155.     MPI_ERR_IN_STATUS        = 18,
  156.     MPI_ERR_PENDING            = 19,
  157.  
  158.  
  159.     /* Error codes 20-27 used by MPI on T3E systems. */
  160.  
  161.     /* These 34 error codes are specified by the MPI-2 standard */
  162.  
  163.     MPI_ERR_ACCESS            = 28,
  164.     MPI_ERR_AMODE            = 29,
  165.     MPI_ERR_ASSERT            = 30,
  166.     MPI_ERR_BAD_FILE        = 31,
  167.     MPI_ERR_BASE            = 32,
  168.     MPI_ERR_CONVERSION        = 33,
  169.     MPI_ERR_DISP            = 34,
  170.     MPI_ERR_DUP_DATAREP        = 35,
  171.     MPI_ERR_FILE_EXISTS        = 36,
  172.     MPI_ERR_FILE_IN_USE        = 37,
  173.     MPI_ERR_FILE            = 38,
  174.     MPI_ERR_INFO_KEY        = 39,
  175.     MPI_ERR_INFO_NOKEY        = 40,
  176.     MPI_ERR_INFO_VALUE        = 41,
  177.     MPI_ERR_INFO            = 42,
  178.     MPI_ERR_IO            = 43,
  179.     MPI_ERR_KEYVAL            = 44,
  180.     MPI_ERR_LOCKTYPE        = 45,
  181.     MPI_ERR_NAME            = 46,
  182.     MPI_ERR_NO_MEM            = 47,
  183.     MPI_ERR_NOT_SAME        = 48,
  184.     MPI_ERR_NO_SPACE        = 49,
  185.     MPI_ERR_NO_SUCH_FILE        = 50,
  186.     MPI_ERR_PORT            = 51,
  187.     MPI_ERR_QUOTA            = 52,
  188.     MPI_ERR_READ_ONLY        = 53,
  189.     MPI_ERR_RMA_CONFLICT        = 54,
  190.     MPI_ERR_RMA_SYNC        = 55,
  191.     MPI_ERR_SERVICE            = 56,
  192.     MPI_ERR_SIZE            = 57,
  193.     MPI_ERR_SPAWN            = 58,
  194.     MPI_ERR_UNSUPPORTED_DATAREP    = 59,
  195.     MPI_ERR_UNSUPPORTED_OPERATION    = 60,
  196.     MPI_ERR_WIN            = 61,
  197.     MPI_ERR_LASTCODE        = 100    /* last built-in error code */
  198. };
  199.  
  200. enum {
  201.     MPI_KEYVAL_INVALID    = 0,
  202.     MPI_TAG_UB        = 1,
  203.     MPI_HOST        = 2,
  204.     MPI_IO            = 3,
  205.     MPI_WTIME_IS_GLOBAL    = 4
  206. };
  207.  
  208. enum {
  209.     MPI_IDENT        = 0,
  210.     MPI_CONGRUENT        = 1,
  211.     MPI_SIMILAR        = 2,
  212.     MPI_UNEQUAL        = 3
  213. };
  214.  
  215. enum {
  216.     MPI_GRAPH        = 1,
  217.     MPI_CART        = 2
  218. };
  219.  
  220. enum {
  221.     MPI_UNDEFINED        = -3,
  222.     MPI_ANY_SOURCE        = -2,
  223.     MPI_PROC_NULL        = -1
  224. };
  225.  
  226. enum {
  227.     MPI_ANY_TAG        = -1
  228. };
  229.  
  230. enum {
  231.     MPI_BSEND_OVERHEAD    = 32
  232. };
  233.  
  234. enum {
  235.     MPI_MAX_PROCESSOR_NAME    = 256
  236. };
  237.  
  238. enum {
  239.     MPI_MAX_ERROR_STRING    = 256
  240. };
  241.  
  242.  
  243. typedef int MPI_Copy_function(MPI_Comm, int, void *, void *, void *, int *);
  244. typedef int MPI_Delete_function(MPI_Comm, int, void *, void *);
  245. typedef void MPI_Handler_function(MPI_Comm *, int *, ...);
  246. typedef void MPI_User_function(void *, void *, int *, MPI_Datatype *); 
  247.  
  248. MPI_Copy_function        MPI_NULL_COPY_FN, MPI_DUP_FN;
  249. MPI_Delete_function        MPI_NULL_DELETE_FN;
  250.  
  251.  
  252. /*************************************/
  253. /* MPI-1 bindings, sorted by chapter */
  254. /*************************************/
  255.  
  256.  
  257. /* 3.2 */
  258.  
  259. int  MPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  260. int PMPI_Send(void *, int, MPI_Datatype, int, int, MPI_Comm);
  261.  
  262. int  MPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  263. int PMPI_Recv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  264.  
  265. int  MPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  266. int PMPI_Get_count(MPI_Status *, MPI_Datatype, int *);
  267.  
  268. /* 3.4 */
  269.  
  270. int  MPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  271. int PMPI_Bsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  272.  
  273. int  MPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  274. int PMPI_Ssend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  275.  
  276. int  MPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  277. int PMPI_Rsend(void *, int, MPI_Datatype, int, int, MPI_Comm);
  278.  
  279. /* 3.6 */
  280.  
  281. int  MPI_Buffer_attach(void *, int);
  282. int PMPI_Buffer_attach(void *, int);
  283.  
  284. int  MPI_Buffer_detach(void *, int *);
  285. int PMPI_Buffer_detach(void *, int *);
  286.  
  287. /* 3.7 */
  288.  
  289. int  MPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  290. int PMPI_Isend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  291.  
  292. int  MPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  293. int PMPI_Ibsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  294.  
  295. int  MPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  296. int PMPI_Issend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  297.  
  298. int  MPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  299. int PMPI_Irsend(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  300.  
  301. int  MPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  302. int PMPI_Irecv(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  303.  
  304. int  MPI_Wait(MPI_Request *, MPI_Status *);
  305. int PMPI_Wait(MPI_Request *, MPI_Status *);
  306.  
  307. int  MPI_Test(MPI_Request *, int *, MPI_Status *);
  308. int PMPI_Test(MPI_Request *, int *, MPI_Status *);
  309.  
  310. int  MPI_Request_free(MPI_Request *);
  311. int PMPI_Request_free(MPI_Request *);
  312.  
  313. int  MPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  314. int PMPI_Waitany(int, MPI_Request *, int *, MPI_Status *);
  315.  
  316. int  MPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  317. int PMPI_Testany(int, MPI_Request *, int *, int *, MPI_Status *);
  318.  
  319. int  MPI_Waitall(int, MPI_Request *, MPI_Status *);
  320. int PMPI_Waitall(int, MPI_Request *, MPI_Status *);
  321.  
  322. int  MPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  323. int PMPI_Testall(int, MPI_Request *, int *, MPI_Status *);
  324.  
  325. int  MPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  326. int PMPI_Waitsome(int, MPI_Request *, int *, int *, MPI_Status *);
  327.  
  328. int  MPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  329. int PMPI_Testsome(int, MPI_Request *, int *, int *, MPI_Status *);
  330.  
  331. /* 3.8 */
  332.  
  333. int  MPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  334. int PMPI_Iprobe(int, int, MPI_Comm, int *, MPI_Status *);
  335.  
  336. int  MPI_Probe(int, int, MPI_Comm, MPI_Status *);
  337. int PMPI_Probe(int, int, MPI_Comm, MPI_Status *);
  338.  
  339. int  MPI_Cancel(MPI_Request *);
  340. int PMPI_Cancel(MPI_Request *);
  341.  
  342. int  MPI_Test_cancelled(MPI_Status *, int *);
  343. int PMPI_Test_cancelled(MPI_Status *, int *);
  344.  
  345. /* 3.9 */
  346.  
  347. int  MPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  348. int PMPI_Send_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  349.  
  350. int  MPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  351. int PMPI_Bsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  352.  
  353. int  MPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  354. int PMPI_Ssend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  355.  
  356. int  MPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  357. int PMPI_Rsend_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  358.  
  359. int  MPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  360. int PMPI_Recv_init(void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
  361.  
  362. int  MPI_Start(MPI_Request *);
  363. int PMPI_Start(MPI_Request *);
  364.  
  365. int  MPI_Startall(int, MPI_Request *);
  366. int PMPI_Startall(int, MPI_Request *);
  367.  
  368. /* 3.10 */
  369.  
  370. int  MPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  371. int PMPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
  372.  
  373. int  MPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  374. int PMPI_Sendrecv_replace(void *, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
  375.  
  376. /* 3.12 */
  377.  
  378. int  MPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  379. int PMPI_Type_contiguous(int, MPI_Datatype, MPI_Datatype *);
  380.  
  381. int  MPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  382. int PMPI_Type_vector(int, int, int, MPI_Datatype, MPI_Datatype *);
  383.  
  384. int  MPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  385. int PMPI_Type_hvector(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
  386.  
  387. int  MPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  388. int PMPI_Type_indexed(int, int *, int *, MPI_Datatype, MPI_Datatype *);
  389.  
  390. int  MPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  391. int PMPI_Type_hindexed(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
  392.  
  393. int  MPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  394. int PMPI_Type_struct(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
  395.  
  396. int  MPI_Address(void *, MPI_Aint *);
  397. int PMPI_Address(void *, MPI_Aint *);
  398.  
  399. int  MPI_Type_extent(MPI_Datatype, MPI_Aint *);
  400. int PMPI_Type_extent(MPI_Datatype, MPI_Aint *);
  401.  
  402. int  MPI_Type_size(MPI_Datatype, int *);
  403. int PMPI_Type_size(MPI_Datatype, int *);
  404.  
  405. int  MPI_Type_lb(MPI_Datatype, MPI_Aint *);
  406. int PMPI_Type_lb(MPI_Datatype, MPI_Aint *);
  407.  
  408. int  MPI_Type_ub(MPI_Datatype, MPI_Aint *);
  409. int PMPI_Type_ub(MPI_Datatype, MPI_Aint *);
  410.  
  411. int  MPI_Type_commit(MPI_Datatype *);
  412. int PMPI_Type_commit(MPI_Datatype *);
  413.  
  414. int  MPI_Type_free(MPI_Datatype *);
  415. int PMPI_Type_free(MPI_Datatype *);
  416.  
  417. int  MPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  418. int PMPI_Get_elements(MPI_Status *, MPI_Datatype, int *);
  419.  
  420. /* 3.13 */
  421.  
  422. int  MPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  423. int PMPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm);
  424.  
  425. int  MPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  426. int PMPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm);
  427.  
  428. int  MPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  429. int PMPI_Pack_size(int, MPI_Datatype, MPI_Comm, int *);
  430.  
  431. /* 4.3 */
  432.  
  433. int  MPI_Barrier(MPI_Comm);
  434. int PMPI_Barrier(MPI_Comm);
  435.  
  436. /* 4.4 */
  437.  
  438. int  MPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  439. int PMPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm);
  440.  
  441. /* 4.5 */
  442.  
  443. int  MPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  444. int PMPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm); 
  445.  
  446. int  MPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  447. int PMPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm); 
  448.  
  449. /* 4.6 */
  450.  
  451. int  MPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  452. int PMPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  453.  
  454. int  MPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  455. int PMPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm);
  456.  
  457. /* 4.7 */
  458.  
  459. int  MPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  460. int PMPI_Allgather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  461.  
  462. int  MPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  463. int PMPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  464.  
  465. /* 4.8 */
  466.  
  467. int  MPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  468. int PMPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm);
  469.  
  470. int  MPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  471. int PMPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm);
  472.  
  473. /* 4.9 */
  474.  
  475. int  MPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  476. int PMPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
  477.  
  478. int  MPI_Op_create(MPI_User_function *, int, MPI_Op *);
  479. int PMPI_Op_create(MPI_User_function *, int, MPI_Op *);
  480.  
  481. int  MPI_Op_free(MPI_Op *);
  482. int PMPI_Op_free(MPI_Op *);
  483.  
  484. int  MPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  485. int PMPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  486.  
  487. /* 4.10 */
  488.  
  489. int  MPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  490. int PMPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm);
  491.  
  492. /* 4.11 */
  493.  
  494. int  MPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  495. int PMPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
  496.  
  497. /* 5.3 */
  498.  
  499. int  MPI_Group_size(MPI_Group, int *);
  500. int PMPI_Group_size(MPI_Group, int *);
  501.  
  502. int  MPI_Group_rank(MPI_Group, int *);
  503. int PMPI_Group_rank(MPI_Group, int *);
  504.  
  505. int  MPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  506. int PMPI_Group_translate_ranks(MPI_Group, int, int *, MPI_Group, int *);
  507.  
  508. int  MPI_Group_compare(MPI_Group, MPI_Group, int *);
  509. int PMPI_Group_compare(MPI_Group, MPI_Group, int *);
  510.  
  511. int  MPI_Comm_group(MPI_Comm, MPI_Group *);
  512. int PMPI_Comm_group(MPI_Comm, MPI_Group *);
  513.  
  514. int  MPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  515. int PMPI_Group_union(MPI_Group, MPI_Group, MPI_Group *);
  516.  
  517. int  MPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  518. int PMPI_Group_intersection(MPI_Group, MPI_Group, MPI_Group *);
  519.  
  520. int  MPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  521. int PMPI_Group_difference(MPI_Group, MPI_Group, MPI_Group *);
  522.  
  523. int  MPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  524. int PMPI_Group_incl(MPI_Group, int, int *, MPI_Group *);
  525.  
  526. int  MPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  527. int PMPI_Group_excl(MPI_Group, int, int *, MPI_Group *);
  528.  
  529. int  MPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  530. int PMPI_Group_range_incl(MPI_Group, int, int [][3], MPI_Group *);
  531.  
  532. int  MPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  533. int PMPI_Group_range_excl(MPI_Group, int, int [][3], MPI_Group *);
  534.  
  535. int  MPI_Group_free(MPI_Group *);
  536. int PMPI_Group_free(MPI_Group *);
  537.  
  538. /* 5.4 */
  539.  
  540. int  MPI_Comm_size(MPI_Comm, int *);
  541. int PMPI_Comm_size(MPI_Comm, int *);
  542.  
  543. int  MPI_Comm_rank(MPI_Comm, int *);
  544. int PMPI_Comm_rank(MPI_Comm, int *);
  545.  
  546. int  MPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  547. int PMPI_Comm_compare(MPI_Comm, MPI_Comm, int *);
  548.  
  549. int  MPI_Comm_dup(MPI_Comm, MPI_Comm *);
  550. int PMPI_Comm_dup(MPI_Comm, MPI_Comm *);
  551.  
  552. int  MPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  553. int PMPI_Comm_create(MPI_Comm, MPI_Group, MPI_Comm *);
  554.  
  555. int  MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  556. int PMPI_Comm_split(MPI_Comm, int, int, MPI_Comm *);
  557.  
  558. int  MPI_Comm_free(MPI_Comm *);
  559. int PMPI_Comm_free(MPI_Comm *);
  560.  
  561. /* 5.6 */
  562.  
  563. int  MPI_Comm_test_inter(MPI_Comm, int *);
  564. int PMPI_Comm_test_inter(MPI_Comm, int *);
  565.  
  566. int  MPI_Comm_remote_size(MPI_Comm, int *);
  567. int PMPI_Comm_remote_size(MPI_Comm, int *);
  568.  
  569. int  MPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  570. int PMPI_Comm_remote_group(MPI_Comm, MPI_Group *);
  571.  
  572. int  MPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  573. int PMPI_Intercomm_create(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
  574.  
  575. int  MPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  576. int PMPI_Intercomm_merge(MPI_Comm, int, MPI_Comm *);
  577.  
  578. /* 5.7 */
  579.  
  580. int  MPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  581. int PMPI_Keyval_create(MPI_Copy_function *, MPI_Delete_function *, int *, void *);
  582.  
  583. int  MPI_Keyval_free(int *);
  584. int PMPI_Keyval_free(int *);
  585.  
  586. int  MPI_Attr_put(MPI_Comm, int, void *);
  587. int PMPI_Attr_put(MPI_Comm, int, void *);
  588.  
  589. int  MPI_Attr_get(MPI_Comm, int, void *, int *);
  590. int PMPI_Attr_get(MPI_Comm, int, void *, int *);
  591.  
  592. int  MPI_Attr_delete(MPI_Comm, int);
  593. int PMPI_Attr_delete(MPI_Comm, int);
  594.  
  595. /* 6.5 */
  596.  
  597. int  MPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  598. int PMPI_Cart_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  599.  
  600. int  MPI_Dims_create(int, int, int *);
  601. int PMPI_Dims_create(int, int, int *);
  602.  
  603. int  MPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  604. int PMPI_Graph_create(MPI_Comm, int, int *, int *, int, MPI_Comm *);
  605.  
  606. int  MPI_Topo_test(MPI_Comm, int *);
  607. int PMPI_Topo_test(MPI_Comm, int *);
  608.  
  609. int  MPI_Graphdims_get(MPI_Comm, int *, int *);
  610. int PMPI_Graphdims_get(MPI_Comm, int *, int *);
  611.  
  612. int  MPI_Graph_get(MPI_Comm, int, int, int *, int *);
  613. int PMPI_Graph_get(MPI_Comm, int, int, int *, int *);
  614.  
  615. int  MPI_Cartdim_get(MPI_Comm, int *);
  616. int PMPI_Cartdim_get(MPI_Comm, int *);
  617.  
  618. int  MPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  619. int PMPI_Cart_get(MPI_Comm, int, int *, int *, int *);
  620.  
  621. int  MPI_Cart_rank(MPI_Comm, int *, int *);
  622. int PMPI_Cart_rank(MPI_Comm, int *, int *);
  623.  
  624. int  MPI_Cart_coords(MPI_Comm, int, int, int *);
  625. int PMPI_Cart_coords(MPI_Comm, int, int, int *);
  626.  
  627. int  MPI_Graph_neighbors_count(MPI_Comm, int, int *);
  628. int PMPI_Graph_neighbors_count(MPI_Comm, int, int *);
  629.  
  630. int  MPI_Graph_neighbors(MPI_Comm, int, int, int *);
  631. int PMPI_Graph_neighbors(MPI_Comm, int, int, int *);
  632.  
  633. int  MPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  634. int PMPI_Cart_shift(MPI_Comm, int, int, int *, int *);
  635.  
  636. int  MPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  637. int PMPI_Cart_sub(MPI_Comm, int *, MPI_Comm *);
  638.  
  639. int  MPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  640. int PMPI_Cart_map(MPI_Comm, int, int *, int *, int *);
  641.  
  642. int  MPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  643. int PMPI_Graph_map(MPI_Comm, int, int *, int *, int *);
  644.  
  645. /* 7.1 */
  646.  
  647. int  MPI_Get_processor_name(char *, int *);
  648. int PMPI_Get_processor_name(char *, int *);
  649.  
  650. /* 7.2 */
  651.  
  652. int  MPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  653. int PMPI_Errhandler_create(MPI_Handler_function *, MPI_Errhandler *);
  654.  
  655. int  MPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  656. int PMPI_Errhandler_set(MPI_Comm, MPI_Errhandler);
  657.  
  658. int  MPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  659. int PMPI_Errhandler_get(MPI_Comm, MPI_Errhandler *);
  660.  
  661. int  MPI_Errhandler_free(MPI_Errhandler *);
  662. int PMPI_Errhandler_free(MPI_Errhandler *);
  663.  
  664. int  MPI_Error_string(int, char *, int *);
  665. int PMPI_Error_string(int, char *, int *);
  666.  
  667. /* 7.3 */
  668.  
  669. int  MPI_Error_class(int, int *);
  670. int PMPI_Error_class(int, int *);
  671.  
  672. /* 7.4 */
  673.  
  674. double  MPI_Wtime(void);
  675. double PMPI_Wtime(void);
  676.  
  677. double  MPI_Wtick(void);
  678. double PMPI_Wtick(void);
  679.  
  680. /* 7.5 */
  681.  
  682. int  MPI_Init(int *, char ***);
  683. int PMPI_Init(int *, char ***);
  684.  
  685. int  MPI_Finalize(void);
  686. int PMPI_Finalize(void);
  687.  
  688. int  MPI_Initialized(int *);
  689. int PMPI_Initialized(int *);
  690.  
  691. int  MPI_Abort(MPI_Comm, int);
  692. int PMPI_Abort(MPI_Comm, int);
  693.  
  694. /* 8.3 */
  695.  
  696. int  MPI_Pcontrol(int, ...);
  697. int PMPI_Pcontrol(int, ...);
  698.  
  699. /********************/
  700. /* MPI-1.2 bindings */
  701. /********************/
  702.  
  703. #define MPI_VERSION        1
  704. #define MPI_SUBVERSION        2
  705.  
  706. int  MPI_Get_version(int *, int *);
  707. int PMPI_Get_version(int *, int *);
  708.  
  709.  
  710. /*************************************/
  711. /* MPI-2 bindings, sorted by chapter */
  712. /*************************************/
  713.  
  714. enum {
  715.     MPI_FUNDAMENTAL        = -1
  716. };
  717.  
  718. /* 5.2 */
  719.  
  720. int  MPI_Free_mem(void *);
  721. int PMPI_Free_mem(void *);
  722.  
  723. /* 7.5 */
  724.  
  725. int  MPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  726. int PMPI_Type_get_envelope(MPI_Datatype, int *, int *, int *, int *);
  727.  
  728. int  MPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  729. int PMPI_Type_get_contents(MPI_Datatype, int, int, int, int *, MPI_Aint *, MPI_Datatype *);
  730.  
  731. /* 7.8 */
  732.  
  733. int  MPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  734. int PMPI_Type_dup(MPI_Datatype, MPI_Datatype *);
  735.  
  736. /* 8.6 */
  737.  
  738. enum {
  739.     MPI_COMBINER_NAMED          = (-1),
  740.     MPI_COMBINER_CONTIGUOUS     = 0,
  741.     MPI_COMBINER_VECTOR         = 1,
  742.     MPI_COMBINER_HVECTOR        = 2,
  743.     MPI_COMBINER_INDEXED        = 3,
  744.     MPI_COMBINER_HINDEXED       = 4,
  745.     MPI_COMBINER_STRUCT         = 5,
  746.     MPI_COMBINER_DARRAY        = 6,
  747.     MPI_COMBINER_DUP        = 7,
  748.     MPI_COMBINER_F90_COMPLES    = 8,
  749.     MPI_COMBINER_F90_INTEGER    = 9,
  750.     MPI_COMBINER_F90_REAL        = 10,
  751.     MPI_COMBINER_HINDEXED_INTEGER    = 11,
  752.     MPI_COMBINER_HVECTOR_INTEGER    = 12,
  753.     MPI_COMBINER_INDEXED_BLOCK    = 13,
  754.     MPI_COMBINER_RESIZED        = 14,
  755.     MPI_COMBINER_STRUCT_INTEGER    = 15,
  756.     MPI_COMBINER_SUBARRAY        = 16
  757. };
  758.  
  759. /* 9.6 */
  760.  
  761. int  MPI_Finalized(int *);
  762. int PMPI_Finalized(int *);
  763.  
  764. #if defined(__cplusplus)
  765. }
  766. #endif
  767.  
  768. #endif    /* MPI_H_INCLUDED */
  769.